function CurrencyManager(app, div) {

	var self = this;
	this.view = null;
	this.currencies = new Array();
	this.bookId = null;

	$.extend(this, new Cache());

	$.subscribe('currencies-request', function(event, caller) {
		caller.updateFn(self.currencies);
	});

	this.loadCurrencies = function(bookId) {
		if(this.view == null) {
            this.view = new ListView(div, {
	            cookie: 'currencyId',
                listTitle: 'Валюты:',
                editTitle: 'Редактирование валюты',
                listDiv: 'currencyList',
                contextMenuDiv: 'currencyContextMenu',
                updateDialogDiv: 'currencyUpdateDialog',
                inputDiv: 'newCurrency',
                createBtnDiv: 'createCurrencyBtn',
                createItemFn: function(name) {
                    self.createCurrency(name);
                },
                updateItemFn: function(currencyId, name) {
                    self.updateCurrency(currencyId, name);
                },
                removeItemFn: function(currencyId) {
                    self.removeCurrency(currencyId);
                }
            }).init();
			$.subscribe('currencies-loaded', function(event, data) {
				self.view.updateItems(data.items);
			});
		}

		if(bookId !== undefined) {
			this.bookId = bookId;
		}
		app.showProgress('Загрузка валют ...');
		$.ajax({
			url: 'service/currency/read.txt',
			data: { bookId: bookId },
			async: true,
			cache: false,
			success: function (data, status, xhr) {
				self.currencies.length = 0;
				self.cleanCache();
				var response = jQuery.parseJSON(data);
				var cur;
				$.each(response.items, function(index, currency) {
					cur = new Currency(currency.id, currency.name, currency.name);
					self.currencies.push(cur);
					self.cache(cur);
				});
				$.publish('currencies-loaded', { items: self.currencies });
				app.showNotification('Валюты загружены', 1000);
			},
			error: function () {
				app.showError('Ошибка при загрузке валют', 'Не удалось загрузить валюты книги');
			}
		});
	};

	this.createCurrency = function(name) {
		$.ajax({
			url: 'service/currency/submit.txt',
			data: { bookId: this.bookId, name: name },
			async: true,
			cache: false,
			success: function (data, status, xhr) {
				var response = jQuery.parseJSON(data);
				if(response.result) {
					app.showNotification('Валюта создана', 3000);
					self.loadCurrencies(self.bookId);
				} else {
					app.showNotification('Не удалось создать валюту: ' + response.message, 5000);
				}
			},
			error: function () {
				app.showNotification('Не удалось создать валюту: ' + response.message, 3000);
			}
		});
	};

	this.updateCurrency = function(currencyId, name) {
		$.ajax({
			url: 'service/currency/submit.txt',
			data: { currencyId: currencyId, name: name },
			async: true,
			cache: false,
			success: function (data, status, xhr) {
				var response = jQuery.parseJSON(data);
				if(response.result) {
					app.showNotification('Валюта изменена', 3000);
					self.loadCurrencies(self.bookId);
				} else {
					app.showNotification('Не удалось изменить валюту: ' + response.message, 5000);
				}
			},
			error: function () {
				app.showNotification('Не удалось изменить валюту', 3000);
			}
		});
	};

	this.removeCurrency = function(currencyId) {
		$.ajax({
			url: 'service/currency/remove.txt',
			data: { currencyId: currencyId },
			async: true,
			cache: false,
			success: function (data, status, xhr) {
				var response = jQuery.parseJSON(data);
				if(response.result) {
					app.showNotification('Валюта удалена', 3000);
					self.loadCurrencies(self.bookId);
				} else {
					app.showNotification('Не удалось удалить валюту: ' + response.message, 5000);
				}
			},
			error: function () {
				app.showNotification('Не удалось удалить валюту', 3000);
			}
		});
	};

};